package ipdesk.model.user.dao;

import ipdesk.model.user.bean.UserBean;
import ipdesk.model.user.dao.IUser;

import com.ibatis.dao.client.DaoManager;
import ecg.dao.DaoService;
import ecg.encrypt.Encrypt;
import ecg.util.Time;

/**
 * 사용자 정보에 대한 Dao 클래스
 * 
 * @author 황정식
 * @version 1.0 - 2011/10/06
 */
public class UserDao
{
	private static UserDao singleton;
	
	protected UserDao(){}
	
	public static UserDao getInstance()
	{
		if(singleton == null)
		{
			singleton = new UserDao();
		}
		
		return singleton;
	}
	
	private DaoManager	manager	= DaoService.getInstance();
	private IUser 		user 	= (IUser)manager.getDao(IUser.class, "ip_desk");
	
	/*
	 * 사용자에게서 입력받은 데이터를 DB에 insert 하는 메서드.
	 */
	public int insertData(UserBean userBean) throws Exception
	{
		int resultFlag = 0;
		
		
			
		String today = Time.getDateTime();
		
		// 기존 DB의 패스워드를 AES 타입으로 암호화 한다.
		String encryptedPassword = Encrypt.encryption(userBean.getUserPassword2(), null);
		
		
		userBean.setRegTime(today);
		userBean.setUserPassword(encryptedPassword);
		
		
		try{
			manager.startTransaction();			
			
			user.insertUserData(userBean);
			
			manager.commitTransaction();
		}finally{
			manager.endTransaction();
		}
			
			resultFlag = 1;
			
		return resultFlag;
	}
	
	public int selectCount(UserBean userBean) throws Exception
	{
			
		// iBatis 연동.
		int count = user.getSelectCount(userBean);
			
		return count;
		
	}
	
	
	// 해당 이메일의 비밀번호를 가져오는 메서드
	public String getPassword(UserBean userBean) throws Exception
	{
		String password = user.getPassword(userBean);
	
		return password;
	}
	
	
	// 해당 이메일에 해당하는 전체 정보를 가져오는 메서드
	public UserBean getUserInfo(UserBean userBean) throws Exception
	{
		UserBean result = user.getUserInfo(userBean);
	
		return result;
	}
	
	
	// 마지막 로그인 시간 및 마지막 로그인 IP 업데이트하는 메서드
	public void lastLoginInfoUpdate(UserBean userBean) throws Exception
	{
		user.lastLoginInfoUpdate(userBean);
	}
	
	/**
	 *  사용자 비밀번호 수정.
	 */
	public void updatePassword(UserBean userBean)
	{
		user.updatePassword(userBean);
	}
}
